# @Filename:    dict
# @Author:      王佳伟
# @Time:        2025-02-06 15:27
# @Describe:    dict-字典

# Python字典（dictionary）是一个无序的键值对集合。Python中有许多内置函数可以操作字典。
# 以下是一些常用的函数及其示例：

# 创建字典
# 创建一个空字典
my_dict = {}

# 创建一个非空字典
my_dict = {'apple': 1, 'banana': 2, 'orange': 3}

# 访问字典
# 获取字典中指定键对应的值
value = my_dict['apple']
print(value)  # 输出：1

# 使用get()方法获取字典中指定键对应的值
value = my_dict.get('banana')
print(value)  # 输出：2

# 获取字典中所有键的列表
keys = list(my_dict.keys())
print(keys)  # 输出：['apple', 'banana', 'orange']

# 获取字典中所有值的列表
values = list(my_dict.values())
print(values)  # 输出：[1, 2, 3]

# 修改字典
# 修改字典中指定键对应的值
my_dict['apple'] = 4
print(my_dict)  # 输出：{'apple': 4, 'banana': 2, 'orange': 3}

# 使用update()方法修改字典中的值
my_dict.update({'apple': 5, 'orange': 6})
print(my_dict)  # 输出：{'apple': 5, 'banana': 2, 'orange': 6}

# 删除字典
# 删除字典中指定键值对
del my_dict['apple']
print(my_dict)  # 输出：{'banana': 2, 'orange': 6}

# 删除字典中所有键值对
my_dict.clear()
print(my_dict)  # 输出：{}

# 其他函数
# 获取字典中键值对的数量
num_items = len(my_dict)
print(num_items)  # 输出：0

# 检查字典中是否存在指定键
if 'apple' in my_dict:
    print('Yes')  # 输出：No

# 复制字典
new_dict = my_dict.copy()
print(new_dict)  # 输出：{}


# 遍历字典
# 遍历字典中所有键值对
for key, value in my_dict.items():
    print(key, value)

# 遍历字典中所有键
for key in my_dict.keys():
    print(key)

# 遍历字典中所有值
for value in my_dict.values():
    print(value)

# 设置默认值
# 使用setdefault()方法设置默认值
my_dict.setdefault('apple', 0)
print(my_dict)  # 输出：{'banana': 2, 'orange': 6, 'apple': 0}

# 合并字典
# 使用update()方法合并字典
dict1 = {'apple': 1, 'banana': 2}
dict2 = {'orange': 3, 'pear': 4}
dict1.update(dict2)
print(dict1)  # 输出：{'apple': 1, 'banana': 2, 'orange': 3, 'pear': 4}

# 使用**运算符合并字典
dict1 = {'apple': 1, 'banana': 2}
dict2 = {'orange': 3, 'pear': 4}
dict3 = {**dict1, **dict2}
print(dict3)  # 输出：{'apple': 1, 'banana': 2, 'orange': 3, 'pear': 4}

# 字典推导式
# 创建字典推导式
my_dict = {i: i*2 for i in range(5)}
print(my_dict)  # 输出：{0: 0, 1: 2, 2: 4, 3: 6, 4: 8}

# 反转字典
# 反转字典中的键值对
my_dict = {'apple': 1, 'banana': 2, 'orange': 3}
reversed_dict = {value: key for key, value in my_dict.items()}
print(reversed_dict)  # 输出：{1: 'apple', 2: 'banana', 3: 'orange'}

# 排序字典
# 按键排序
my_dict = {'apple': 1, 'banana': 2, 'orange': 3}
sorted_dict = {key: my_dict[key] for key in sorted(my_dict)}
print(sorted_dict)  # 输出：{'apple': 1, 'banana': 2, 'orange': 3}

# 按值排序
my_dict = {'apple': 1, 'banana': 2, 'orange': 3}
sorted_dict = {key: value for key, value in sorted(my_dict.items(), key=lambda item: item[1])}
print(sorted_dict)  # 输出：{'apple': 1, 'banana': 2, 'orange': 3}

# 过滤字典
# 过滤字典中满足条件的键值对
my_dict = {'apple': 1, 'banana': 2, 'orange': 3}
filtered_dict = {key: value for key, value in my_dict.items() if value > 1}
print(filtered_dict)  # 输出：{'banana': 2, 'orange': 3}

# 计数器
# 使用collections模块中的Counter类创建计数器
from collections import Counter
my_list = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple']
my_counter = Counter(my_list)
print(my_counter)  # 输出：Counter({'apple': 3, 'banana': 2, 'orange': 1})

# 获取计数器中指定元素的数量
count = my_counter['apple']
print(count)  # 输出：3

# 获取计数器中出现次数最多的元素和出现次数
most_common = my_counter.most_common(1)
print(most_common)  # 输出：[('apple', 3)]

